package com.koubei.distribute.consistent.hash;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
	public static void main(String[] args){
		testHashCode();
	}
	
	public static void testHashCode(){
		String id = "abcdefghigk123456789abababababa";
		//HashAlgorithm alg = HashAlgorithm.KETAMA_HASH;
		int[] ips = new int[1000];
		long time1 = System.currentTimeMillis();
		for(int i =0; i<100000000; i++){
			/*byte[] b_id = alg.computeMd5(id+""+i);
			long l_id = alg.hash((id+i).getBytes(), 0);*/
			int num = ((id+i).hashCode())%1000;
			//num = Math.abs(num);
			//num = num < 0 ? Math.abs(num) : num;
			num = num < 0 ? (num*-1) : num;
			ips[num]++;
		}
		int i = 0;
		for(int ip : ips){
			System.out.println("ips["+i+++"]"+ip);
		}
		System.out.println(System.currentTimeMillis()-time1);
	}
	
	public static void testHash(){
		List<String> list = new ArrayList<String>();
		list.add("node1");
		list.add("node2");
		list.add("node3");
		list.add("node4");
		list.add("node5");
		KetamaNodeLocator<String> knl = new KetamaNodeLocator<String>(list,HashAlgorithm.KETAMA_HASH,200);
		List<String> listkey = new ArrayList<String>();
		listkey.add("a");
		listkey.add("b");
		listkey.add("c");
		listkey.add("d");
		listkey.add("e");
		listkey.add("f");
		listkey.add("g");
		listkey.add("h");
		listkey.add("i");
		listkey.add("j");
		listkey.add("k");
		listkey.add("m");
		listkey.add("n");
		listkey.add("o");
		listkey.add("p");
		listkey.add("q");
		listkey.add("r");
		listkey.add("s");
		listkey.add("t");
		listkey.add("z");
		listkey.add("ay");
		listkey.add("by");
		listkey.add("cy");
		listkey.add("dy");
		listkey.add("ey");
		listkey.add("fy");
		listkey.add("gy");
		listkey.add("hy");
		Map<String, Integer> map = new HashMap<String, Integer>();
		for(String node : list){
			map.put(node, 0);
		}
		for(String s : listkey){
			String node = knl.getPrimary(s);
			//System.out.println(s+":"+knl.getPrimary(s));
			int i = map.get(node);
			map.put(node, ++i);
		}
		for(String node : list){
			System.out.println(node+":"+map.get(node));
		}
		System.out.println("=========");
		knl.add("node6");
		knl.add("node7");
		list.add("node6");
		list.add("node7");
		for(String node : list){
			map.put(node, 0);
		}
		for(String s : listkey){
			String node = knl.getPrimary(s);
			//System.out.println(s+":"+knl.getPrimary(s));
			int i = map.get(node);
			map.put(node, ++i);
		}
		for(String node : list){
			System.out.println(node+":"+map.get(node));
		}
		
		System.out.println("=========");
		knl.remove("node3");
		list.remove("node3");
		for(String node : list){
			map.put(node, 0);
		}
		for(String s : listkey){
			String node = knl.getPrimary(s);
			//System.out.println(s+":"+knl.getPrimary(s));
			int i = map.get(node);
			map.put(node, ++i);
		}
		for(String node : list){
			System.out.println(node+":"+map.get(node));
		}
	}

}
